const Question = require('../models/questions')

class QuestionCtl {
    async find(ctx){
        const { per_page = 10 } = ctx.query
        const page = Math.max(ctx.query.page * 1 -1,1)  
        const perPage = Math.max(per_page * 1,1)
        const q = new RegExp(ctx.query.q)
        ctx.body = await Question
          .find({$or:[{title:q},{description:q}]}) 
          .limit(perPage).skip(page*perPage)
          .skip(page*perPage);
    }
    async checkQuestionExist(ctx,next){
        const question = await Question.findById(ctx.params.id).select('+ questioner')  //select 
        if(!question){ ctx.throw(404,'问题不存在') }
        ctx.state.question = question;   //把question放在state里
        await next();
    }
    async findById(ctx){
        const {fields=''} = ctx.query;   
        const selectFields = fields.split(';').filter(f=>f).map(f => '+' + f).join('');
        const question = await Question.findById(ctx.params.id).select(selectFields).populate('questioner topics');   //populate 
        ctx.body = question;
    }
    async create(ctx){
        ctx.verifyParams({
            title: {type:'string',required:true},
            description: {type:'string',required:false},
        })
        const question = await new Question({...ctx.request.body, questioner:ctx.state.user._id}).save();
        ctx.body = question;
    }
    //确定提问者  和  修改的用户 是否一致 
    async checkQuestioner(ctx,next){
        const {question} = ctx.state
        if(question.questioner.toString() !== ctx.state.user._id){ctx.throw(403,'没有权限')}
        await next();
    }
    async update(ctx){
        ctx.verifyParams({
            title: {type:'string',required:true},
            description: {type:'string',required:false},
        })
        await ctx.state.question.update(ctx.request.body)
        ctx.body = ctx.state.question;
    }
    async delete(ctx){
        await Question.findByIdAndRemove( ctx.params.id );
        ctx.status = 204;
    }
}

module.exports = new QuestionCtl();